Java 是一種廣泛使用的程式設計語言,自 1995 年由 Sun Microsystems 公司發布以來,已經成為全球最受歡迎的程式設計語言之一。Java 的發展歷程充滿創新,從最初的 JDK 1.0 到現在的23,每個版本都帶來了新的特性和改進。
Java 的重要特性包括:
Java 擁有許多獨特的語言特性,以下是 Java 的幾個關鍵特性:
物件導向:
Java 是一種純物件導向的程式設計語言。除了基本資料型別外,Java 中的一切都是物件。這種設計促進了程式碼的重用性、可維護性和擴展性。Java 支援封裝、繼承和多型等物件導向的核心概念。
平台獨立性:
Java 的「一次編寫,到處執行」理念是通過 Java 虛擬機器(JVM)實現的。Java 程式碼首先被編譯成位元組碼,然後可以在任何安裝了 JVM 的平台上執行。這大大提高了 Java 程式的可移植性。
安全性:
Java 設計時就考慮到安全性。它提供安全管理器、存取控制器和類別載入器等機制,以確保程式碼的安全執行。此外,Java 沒有指標概念(這是另外的話題@Unsafe -- XD),避免了許多與記憶體相關的安全問題。
多執行緒支援:
Java 內建對多執行緒程式設計的支援。它提供了同步機制和執行緒間通信的工具,使開發者能夠輕鬆創建高效能的並行應用程式。
自動記憶體管理:
Java 使用垃圾回收機制自動管理記憶體。這消除了手動記憶體管理的需求,減少了記憶體洩漏和其他相關錯誤的可能性。
強型別:
Java 是一種強型別語言,所有變數都必須先宣告後使用。這有助於在編譯時期捕獲錯誤,提高程式的穩定性。
這些特性使 Java 成為一個強大、安全且靈活的程式設計語言,適用於各種應用場景,從小型應用程式到大型企業系統。
Java 程式的基本結構包含幾個關鍵元素:類別、主方法和套件。讓我們詳細了解這些元素:
類別(Class):
在 Java 中,類別是程式的基本單位。每個 Java 程式至少包含一個類別。類別是物件的藍圖,定義了物件的屬性和行為。
主方法(Main Method):
主方法是 Java 應用程式的入口點。當你執行一個 Java 程式時,JVM 會首先尋找並執行主方法。主方法必須是公開的(public),靜態的(static),沒有回傳值(void),並且接受一個字串陣列作為參數。
套件(Package):
套件用於組織和管理相關的類別。它們提供了一種命名空間機制,幫助避免命名衝突,並提高程式的可維護性。
以下是一個基本的 Java 程式結構示例:
package com.example.myapp; // 套件宣告
public class HelloWorld { // 類別宣告
public static void main(String[] args) { // 主方法
System.out.println("Hello, World!"); // 程式邏輯
}
}
在這個例子中:
package com.example.myapp;
宣告了這個類別所屬的套件。public class HelloWorld
定義了一個名為 HelloWorld 的公開類別。public static void main(String[] args)
是程式的主方法。System.out.println("Hello, World!");
是實際執行的程式邏輯,這裡是輸出一行文字。理解這個基本結構對於開始 Java 程式設計至關重要。隨著你的學習深入,你會發現 Java 程式可以變得更加複雜,但這個基本結構始終是核心。
在 Java 中,資料型別和變數是程式設計的基礎。Java 是一種強型別語言,這意味著所有變數都必須在使用前宣告其型別。Java 的資料型別分為兩大類:基本資料型別和參考資料型別。
Java 有 8 種基本資料型別:
參考資料型別包括列舉 (enum)、介面 (interface)、介面、陣列 (Array)、自定義的類別 (class)等。最常用的參考型別是 String(字串)。
在 Java 中,變數的宣告語法為:
資料型別 變數名稱 [= 初始值];
以下是一些變數宣告和初始化的例子:
// 基本資料型別
int age = 25;
double salary = 50000.50;
char grade = 'A';
boolean isStudent = true;
// 參考資料型別
String name = "張小明";
int[] numbers = {1, 2, 3, 4, 5};
Java 支援兩種型別轉換:隱式轉換(自動轉換)和顯式轉換(強制轉換)。
隱式轉換:當較小的型別轉換為較大的型別時,可以自動進行。
例如:int x = 10; long y = x;
顯式轉換:當較大的型別轉換為較小的型別時,需要明確指定。
例如:double x = 10.5; int y = (int) x;
了解並正確使用這些資料型別和變數是編寫高品質 Java 程式的基礎。在實際編程中,選擇適當的資料型別可以提高程式的效能和可讀性。
Java 提供了豐富的運算子,用於執行各種運算。理解這些運算子對於編寫有效的 Java 程式至關重要。以下是 Java 中主要的運算子類型:
用於執行基本的數學運算:
範例:
int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 輸出:13
System.out.println("a % b = " + (a % b)); // 輸出:1
用於比較兩個值:
範例:
int x = 5, y = 8;
System.out.println("x < y: " + (x < y)); // 輸出:true
用於組合布林表達式:
範例:
boolean a = true, b = false;
System.out.println("a && b: " + (a && b)); // 輸出:false
System.out.println("a || b: " + (a || b)); // 輸出:true
用於執行位元級別的運算:
範例:
int a = 5, b = 3;
System.out.println("a & b: " + (a & b)); // 輸出:1
System.out.println("a << 1: " + (a << 1)); // 輸出:10
用於給變數賦值:
範例:
int x = 10;
x += 5; // 等同於 x = x + 5
System.out.println("x: " + x); // 輸出:15
控制流程是程式設計中的基本概念,決定程式的執行順序。Java 有多種控制流程結構,以下是 Java 中主要的控制流程結構:
用於根據條件執行不同的程式碼區塊。
int score = 85;
if (score >= 90) {
System.out.println("優");
} else if (score >= 80) {
System.out.println("良");
} else if (score >= 70) {
System.out.println("普通");
} else {
System.out.println("需要改進");
}
用於多重條件判斷,特別適合處理多個離散值的情況。
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
// ... 其他情況
default:
System.out.println("無效的日期");
}
用於已知迭代次數的情況。
for (int i = 0; i < 5; i++) {
System.out.println("迭代 " + i);
}
用於不確定迭代次數,但知道結束條件的情況。
int count = 0;
while (count < 5) {
System.out.println("計數: " + count);
count++;
}
類似 while 迴圈,但保證至少執行一次。
int num = 1;
do {
System.out.println("數字: " + num);
num *= 2;
} while (num < 100);
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // 跳過 5
}
if (i == 8) {
break; // 在 8 時結束迴圈
}
System.out.println(i);
}
陣列是 Java 中用於儲存多個相同類型元素的資料結構,以下是關於 Java 陣列的重要概念:
一維陣列是最基本的陣列類型,是一個線性的資料集合。
宣告和初始化一維陣列:
// 宣告
int[] numbers;
// 宣告並指定大小
int[] scores = new int[5];
// 宣告並初始化
int[] ages = {25, 30, 35, 40, 45};
存取陣列元素:
int firstAge = ages[0]; // 獲取第一個元素
ages[1] = 31; // 修改第二個元素
Java 支援多維陣列,最常見的是二維陣列。
宣告和初始化二維陣列:
// 宣告
int[][] matrix;
// 宣告並指定大小
int[][] grid = new int[3][3];
// 宣告並初始化
int[][] points = {{1, 2}, {3, 4}, {5, 6}};
存取二維陣列元素:
int value = points[1][0]; // 獲取第二行第一列的元素
grid[0][2] = 5; // 修改第一行第三列的元素
獲取陣列長度:
int length = ages.length;
遍歷陣列:
for (int i = 0; i < ages.length; i++) {
System.out.println(ages[i]);
}
使用增強型 for 迴圈(for-each):
for (int age : ages) {
System.out.println(age);
}
複製陣列:
int[] copyOfAges = Arrays.copyOf(ages, ages.length);
排序陣列:
Arrays.sort(ages);
陣列是 Java 程式設計中的基礎概念,需要注意的是,Java 的陣列是固定大小的。如果需要動態大小的資料結構,可以考慮使用 Java 集合框架中的 ArrayList 或 LinkedList。
方法是 Java 中執行特定任務的程式碼區塊。它們是物件導向程式設計的核心元素,提供了程式碼重用和模組化的機制。以下是關於 Java 方法的重要概念:
方法的基本結構:
修飾符 回傳型別 方法名稱(參數列表) {
// 方法體
return 回傳值; // 如果有的話
}
範例:
public static int add(int a, int b) {
return a + b;
}
// 呼叫方法
int result = add(5, 3);
System.out.println("結果:" + result); // 輸出:結果:8
Java 使用「傳值」的方式傳遞參數。對於基本型別,傳遞的是值的副本;對於物件,傳遞的是參考的副本。
public static void modifyValues(int x, int[] arr) {
x = 100; // 不會影響原始變數
arr[0] = 100; // 會影響原始陣列
}
int num = 10;
int[] numbers = {1, 2, 3};
modifyValues(num, numbers);
System.out.println(num); // 輸出:10
System.out.println(numbers[0]); // 輸出:100
方法可以回傳一個值,或者使用 void 表示不回傳任何值。
public static String greet(String name) {
return "你好," + name;
}
public static void printGreeting(String name) {
System.out.println("你好," + name);
}
Java 支援方法重載,允許在同一個類別中定義多個同名但參數不同的方法。
public static int multiply(int a, int b) {
return a * b;
}
public static double multiply(double a, double b) {
return a * b;
}
int result1 = multiply(5, 3); // 呼叫 int 版本
double result2 = multiply(5.5, 3.2); // 呼叫 double 版本
Java 允許方法接受不定數量的參數。
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
int result = sum(1, 2, 3, 4, 5); // 可以傳入任意數量的參數
System.out.println("總和:" + result); // 輸出:總和:15
本篇文章同步刊載: JYI.TW
筆者個人的網站: JUNYI